#ifndef DATA_FLATTENING_H
#define DATA_FLATTENING_H

#include <stdint.h>  // 为了使用 uint32_t、uint8_t 等精确宽度类型
#include <stdio.h>   // 为了 FILE 类型等文件操作相关定义（如果函数参数/返回值用到）
#include <stdlib.h>  // 为了 EXIT_FAILURE 等宏（如果函数里用到错误退出逻辑）
#include "../matrix_operations/matrix_operations.h"  // 包含矩阵操作相关函数的头文件
#include <stdbool.h>

// 定义 MNIST 数据的结构体，和.c文件里保持一致
typedef struct {
    uint32_t num_items;
    uint32_t rows;
    uint32_t cols;
    uint8_t *data;
} MNIST_Data;

// 声明读取 MNIST 图像数据的函数，供外部模块调用
bool check_pgm_format(const char* filename);
MNIST_Data read_mnist_images(const char *filename);
MNIST_Data read_mnist_labels(const char *filename);
void normalize_images(MNIST_Data *images);
float *flatten_images(MNIST_Data *images);
void save_flattened(const char *filename, float *data, size_t size);
Matrix get_matrix(MNIST_Data data, uint32_t index);
void pgm_to_matrix(const char *file_path, int rows, int cols, double matrix[rows][cols]);

#endif